package com.example.webproject.entity;

import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author hhs
 * @Description
 * @date 2022/12/6 12:18
 */
@Data
@Table(name = "t_user")
@Entity
public class User {
    @Id
    @GeneratedValue
    private Long id;

    @Transient
//    禁止
    public static final int TYPE_BANNED=-1;
    @Transient
//    管理员
    public static final int TYPE_ADMIN=0;
    @Transient
//    老师
    public static final int TYPE_TEACHER=0;
    @Transient
//    学生
    public static final int TYPE_STUDENT=2;

    /**
     * 用户昵称
     */
    private String nickname;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 用户邮箱
     */
    private String email;
    /**
     * 用户电话
     */
    private String phone;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 用户头像
     */
    private String avatar;
    /**
     * 0:管理员  1：教师   2：学生
     */
    private int type;

    /**
     * 也就是加点盐，和真实密码进行某种聚合
     */
    private String salt;

    /**
     * 申请状态
     */
    private boolean applyTeacher;
    /**
     * 创建时间
     */
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;
    @Temporal(TemporalType.TIMESTAMP)
    /**
     * 更新时间
     */
    private Date updateTime;
    /**
     *
     * 表示一名可以对应多门课程
     */
    @JsonManagedReference
    @OneToMany(mappedBy = "teacher",cascade = CascadeType.ALL,fetch = FetchType.LAZY)
    private List<Course> courseList=new ArrayList<>();
//    /**
//     * 已注册课程
//     * 表示一个学生可以学习多门课程  一个课程可以有多个学生
//     */
//
//    @JsonIgnore
    @ManyToMany
    private List<Course> enrolledCourses=new ArrayList<>();
//
//    @JsonManagedReference
//    @OneToMany(mappedBy="student")
//    private List<Result> results=new ArrayList<>();
//
//
//    @JsonManagedReference
//    @OneToMany(mappedBy = "student")
//    private List<Applicant> applicants=new ArrayList<>();


}
